﻿import sys
import os
import pygame
import locations
import transform
from consts import *
from locations import GameLocation, MenuLocation



################################################################################

class Game():
    """
    Class Game - logic of game
    """
    def __init__(self):
        pygame.init()
        pygame.display.set_mode((transform.SCREEN_WIDTH, transform.SCREEN_HEIGHT))
        pygame.display.set_caption('Tower Defense by ASM')
        self.currentMapPath = None
        #---------------------------
        # только на время отладки
        self.currentMapPath = os.path.join(MAPS_PATH, 'map.tdmap')

    def createLocations(self):
        self.menu_location = MenuLocation(self)
        self.game_location = GameLocation(self)
        self.location = self.menu_location

    def mainloop(self):
        self.clock = pygame.time.Clock()
        while True:
            #обрабатываем события
            #вызов функций в питоне - дорогостоящая операция
            #поэтому отдаем все события списком
            self.location.events(pygame.event.get())
            #апдейтим объекты
            time_passed = self.clock.tick(50)
            self.location.update(time_passed)
            #и перерисовываем изменения
            self.location.draw()
            pygame.display.flip()

    #переходы между локациями
    def showMenu(self):
        self.setActiveLocation(self.menu_location)
        pygame.event.set_grab(False) # отдать мышу

    def showGame(self):
        if not self.currentMapPath:
            print('Please first select map')
            return
        self.setActiveLocation(self.game_location)
        if not self.game_location.running:
            self.game_location.__init__(self)
            self.game_location.goMapWorker(self.currentMapPath)
            self.game_location.running = True
        pygame.event.set_grab(True) # захватить мышу
        locations.actionsgui.app.paint() # repaint gui
        ##postUserEvent(EVENT_SHOW_GAME)

    def showGameOver(self):
        self.setActiveLocation(self.gameover_location)

    def setActiveLocation(self, location):
        self.location = location

    def quit(self):
        pygame.quit()
        sys.exit(0)

################################################################################


def main():
    game = Game()
    game.createLocations()
    game.mainloop()


#here we go
if __name__ == '__main__':

    # profiler, ёпта
    if False:
        import profile
        import pstats
        profile.run('main()', 'main_prof')
        stats = pstats.Stats('main_prof')
        stats.strip_dirs()
        stats.sort_stats('time')
        stats.print_stats(5)
    else:
        main()

